package com.hjq.aop;

import com.hjq.anno.LogOperation;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Slf4j
@Component
// @Aspect
public class MyAspect5{
    // 前置通知

    // @Before("execution(public void com.hjq.service.impl.ClazzServiceImpl.deleteById(java.lang.Integer))")//完全形式
    // @Before("execution(void deleteById(java.lang.Integer))")//省略权限修饰符和包名类名
    // @Before("execution(void com.hjq.*.impl.ClazzServiceImpl.deleteById(*))")// *匹配单级包名，*匹配单个参数
    // @Before("execution(void com.hjq.*.impl.ClazzServiceImpl.delete*(*))")//*匹配以delete开头的方法名
    // @Before("execution(void com.hjq.*.impl.*.delete*(*))")//*匹配类名
    // @Before("execution( * com..impl.*.del*(..))")//..匹配多级包名，..匹配任意类型个数的方法形参
    // @Before("execution( * com.*.service.*.del*(..))")//service.* 匹配这个包下的所有子包，同时省略了类名

    // 匹配 findAll 和deleteById方法
    // @Before("execution( * com.hjq.service.impl.DeptServiceImpl.del*(..)) ||" +
    //         "execution( * com.hjq.service.impl.DeptServiceImpl.findAll(..))")//service.* 匹配这个包下的所有子包，同时省略了类名
    @Before("@annotation(com.hjq.anno.LogOperation)")//匹配添加了方法注解LogOperation的方法
    public void before(){
        log.info("MyAspect5 -> before ...");
    }
}
